package com.fzu.express.mapper;

import com.fzu.express.entity.Order;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fzu.express.pojo.DashboardSelectVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.Date;
import java.util.List;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zyq
 * @since 2022-10-27
 */
public interface OrderMapper extends BaseMapper<Order> {

    /**
     * 获取今年各月份订单数量
     * @param outletId 不为空则查询的是某个网点的数据
     * @return
     */
    List<DashboardSelectVO> listMonthOrderCount(@Param("outletId") Long outletId);


    /**
     * 获取指定日期开始各天的快递数据
     * @param start 开始统计的日期
     * @param outletId 不为空则查询的是某个网点的数据
     * @return
     */
    List<DashboardSelectVO> listLatestDateOrder(@Param("start") Date start, @Param("outletId") Long outletId);


    /**
     * 统计今日新增订单数
     * @param outletId 不为空则查询的是某个网点的数据
     * @return
     */
    Long countTodayOrder(@Param("outletId") Long outletId);

    /**
     * 统计总订单数
     * @param outletId 不为空则查询的是某个网点的数据
     * @return
     */
    Long countAllOrder(@Param("outletId") Long outletId);

    /**
     * 网点管理员批量操作快递
     * @param outletId
     * @param status
     * @return
     */
    @Update("update express_order " +
            "set status = #{status} " +
            "where status = #{status} - 1 " +
            "and (start_outlet = #{outletId} or end_outlet = #{outletId})")
    Long updateBatchByOutletManager(@Param("outletId") Long outletId, @Param("status") Integer status);


    /**
     * 快递员批量操作快递
     * @param courier
     * @param status
     * @return
     */
    @Update("update express_order " +
            "set status = #{status} " +
            "where status = #{status} - 1 " +
            "and (start_courier = #{courier} or end_courier = #{courier})")
    Long updateBatchByCourier(@Param("courier") Long courier, @Param("status") Integer status);

}
